package com.cmo.rzl.calling;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.beetl.sql.core.kit.StringKit;

import com.cmo.rzl.core.base.BaseController;
import com.cmo.rzl.core.jfinal.ext.autoroute.ControllerBind;
import com.cmo.rzl.core.toolbox.Record;
import com.cmo.rzl.core.toolbox.kit.ShardKit;
import com.cmo.rzl.shine.model.Pager;
import com.cmo.rzl.shine.model.PatientQueue;
import com.cmo.rzl.shine.model.Terminal;
import com.cmo.rzl.shine.service.PagerService;
import com.cmo.rzl.shine.service.PatientQueueService;
import com.cmo.rzl.shine.service.QueueTypeService;
import com.cmo.rzl.shine.service.TerminalService;
import com.cmo.rzl.shine.service.TriageService;
import com.cmo.rzl.shine.service.impl.PagerServiceImpl;
import com.cmo.rzl.shine.service.impl.PatientQueueServiceImpl;
import com.cmo.rzl.shine.service.impl.QueueTypeServiceImpl;
import com.cmo.rzl.shine.service.impl.TerminalServiceImpl;
import com.cmo.rzl.shine.service.impl.TriageServiceImpl;
import com.jfinal.kit.StrKit;

@ControllerBind(controllerKey = "/call_patient")
public class CallingPatientQueueController extends BaseController {

	ShardKit shared = new ShardKit();
	PatientQueueService servicepatientqueue = new PatientQueueServiceImpl();
	PagerService pager = new PagerServiceImpl();
	TriageService triage = new TriageServiceImpl();
	QueueTypeService queuetype = new QueueTypeServiceImpl();
	TerminalService terminal = new TerminalServiceImpl();

	// 等候患者信息列表
	public void list_patient() {
		Map<String, Object> map = new HashMap<String, Object>();
		String login_id = getSessionAttr("login_id");
		if (StringKit.isBlank(login_id)) {
			map.put("return_code", "fail");
			map.put("return_msg", "获取医生登陆工号失败");
			renderJson(map);
			return;
		}
		// 分诊台分诊模式 triage_type 1按医生 2按叫号器
		// 根据医生工号查询分诊台分诊模式
		Record rt = triage.findtypelogin_id(login_id);
		if (null == rt) {
			map.put("return_code", "fail");
			map.put("return_msg", "查询分诊台分诊模式失败");
			renderJson(map);
			return;
		}
		String ip = shared.getIpAddr(getRequest());
		Pager rpager = pager.findByIP(ip);
		if (rpager.getDoctor_id() == null) {
			map.put("return_code", "loginout");
			map.put("return_msg", "loginout");
			renderJson(map);
			return;
		}
		// 获取分诊台分针模式
		String type = rt.getStr("triage_type");
		if ("1".equals(type)) {// 按医生
			// 获取登陆的队列id
			String queue_type_id = getPara("queue_type_id");
			if (StrKit.isBlank(queue_type_id)) {
				map.put("return_code", "fail");
				map.put("return_msg", "获取队列ID失败");
				renderJson(map);
				return;
			}
			List<Record> list = servicepatientqueue.list_doctor(login_id,
					Integer.parseInt(queue_type_id));

			if (null == list) {
				map.put("return_code", "fail");
				map.put("return_msg", "获取患者信息失败");
				renderJson(map);
				return;
			} else {
				map.put("return_code", "success");
				map.put("return_msg", "获取患者信息成功");
				map.put("list", list);
				map.put("count", list.size());
				renderJson(map);
			}
		} else {
			List<Record> list = servicepatientqueue.list_pager(ip);
			if (null == list) {
				map.put("return_code", "fail");
				map.put("return_msg", "获取患者信息失败");
				renderJson(map);
				return;
			} else {
				map.put("return_code", "success");
				map.put("return_msg", "获取患者信息成功");
				map.put("list", list);
				map.put("count", list.size());
				renderJson(map);
			}
		}
	}

	// 叫号器过号患者列表
	public void list_patient_pass() {
		Map<String, Object> map = new HashMap<String, Object>();
		Pager rpager = pager.findByIP(shared.getIpAddr(getRequest()));
		if (rpager.getDoctor_id() == null) {
			map.put("return_code", "loginout");
			map.put("return_msg", "loginout");
			renderJson(map);
			return;
		}
		// 获取登陆的队列id
		String queue_type_id = getPara("queue_type_id").toString();

		if (StringKit.isBlank(queue_type_id)) {
			map.put("return_code", "fail");
			map.put("return_msg", "获取队列ID失败");
			renderJson(map);
			return;
		}
		// 分诊台分诊模式 triage_type 1按医生 2按叫号器
		// 根据医生工号查询分诊台分诊模式
		String login_id = getSessionAttr("login_id").toString();
		if (StringKit.isBlank(login_id)) {
			map.put("return_code", "fail");
			map.put("return_msg", "获取session中的login_id失败");
			renderJson(map);
			return;
		}
		Record rt = triage.findtypelogin_id(login_id);
		if (null == rt) {
			map.put("return_code", "fail");
			map.put("return_msg", "查询分诊台分诊模式失败");
			renderJson(map);
			return;
		}
		// 获取分诊台分针模式
		String type = rt.get("triage_type").toString();

		String pager_ip = shared.getIpAddr(getRequest());
		// 查询患者信息
		List<Record> list = servicepatientqueue.list_call_patient_pass(
				Integer.parseInt(queue_type_id), pager_ip, type, login_id);
		if (null == list) {
			map.put("return_code", "fail");
			map.put("return_msg", "获取患者信息失败");
			renderJson(map);
			return;
		} else {
			map.put("return_code", "success");
			map.put("return_msg", "获取患者信息成功");
			map.put("list", list);
			map.put("count", list.size());
			renderJson(map);
		}
	}

	// 未到过号患者
	public void list_patient_was() {
		Map<String, Object> map = new HashMap<String, Object>();
		Pager rpager = pager.findByIP(shared.getIpAddr(getRequest()));
		if (rpager.getDoctor_id() == null) {
			map.put("return_code", "loginout");
			map.put("return_msg", "loginout");
			renderJson(map);
			return;
		}
		// 获取登陆的队列id
		String queue_type_id = getPara("queue_type_id").toString();
		if (StringKit.isBlank(queue_type_id)) {
			map.put("return_code", "fail");
			map.put("return_msg", "获取队列ID失败");
			renderJson(map);
			return;
		}
		// 分诊台分诊模式 triage_type 1按医生 2按叫号器
		// 根据医生工号查询分诊台分诊模式
		String login_id = getSessionAttr("login_id").toString();
		// String login_id=getPara("login_id");
		if (StringKit.isBlank(login_id)) {
			map.put("return_code", "fail");
			map.put("return_msg", "获取session中的login_id失败");
			renderJson(map);
			return;
		}
		Record rt = triage.findtypelogin_id(login_id);
		if (null == rt) {
			map.put("return_code", "fail");
			map.put("return_msg", "查询分诊台分诊模式失败");
			renderJson(map);
			return;
		}
		// 获取分诊台分针模式
		String type = rt.get("triage_type").toString();

		String pager_ip = shared.getIpAddr(getRequest());
		// 查询患者信息
		List<Record> list = servicepatientqueue.list_call_patient_was(
				Integer.parseInt(queue_type_id), pager_ip, type, login_id);
		if (list.size() < 1) {
			map.put("return_code", "fail");
			map.put("return_msg", "没有未到过号患者");
			renderJson(map);
			return;
		} else {
			map.put("return_code", "success");
			map.put("return_msg", "获取未到过号患者信息成功");
			map.put("list", list);
			map.put("count", list.size());
			renderJson(map);
		}
	}

	// 叫号器已就诊患
	public void list_patient_over() {
		Map<String, Object> map = new HashMap<String, Object>();
		Pager rpager = pager.findByIP(shared.getIpAddr(getRequest()));
		if (rpager.getDoctor_id() == null) {
			map.put("return_code", "loginout");
			map.put("return_msg", "loginout");
			renderJson(map);
			return;
		}
		int doctor_id = rpager.getDoctor_id();
		// 获取登陆的队列id
		String queue_type_id = getPara("queue_type_id").toString();
		if (StringKit.isBlank(queue_type_id)) {
			map.put("return_code", "fail");
			map.put("return_msg", "获取队列ID失败");
			renderJson(map);
			return;
		}
		// 分诊台分诊模式 triage_type 1按医生 2按叫号器
		// 根据医生工号查询分诊台分诊模式
		String login_id = getSessionAttr("login_id").toString();
		if (StringKit.isBlank(login_id)) {
			map.put("return_code", "fail");
			map.put("return_msg", "获取session中的login_id失败");
			renderJson(map);
			return;
		}
		Record rt = triage.findtypelogin_id(login_id);
		if (null == rt) {
			map.put("return_code", "fail");
			map.put("return_msg", "查询分诊台分诊模式失败");
			renderJson(map);
			return;
		}
		// 获取分诊台分针模式
		String type = rt.get("triage_type").toString();

		String pager_ip = shared.getIpAddr(getRequest());

		// 查询患者信息
		List<Record> list = servicepatientqueue.list_call_patient_over(
				Integer.parseInt(queue_type_id), pager_ip, type, login_id,
				doctor_id);
		if (null == list) {
			map.put("return_code", "fail");
			map.put("return_msg", "获取患者信息失败");
			renderJson(map);
			return;
		} else {
			map.put("return_code", "success");
			map.put("return_msg", "获取患者信息成功");
			map.put("list", list);
			map.put("count", list.size());
			renderJson(map);
		}
	}

	// 顺序呼叫
	public void call_next() {
		Map<String, Object> map = new HashMap<String, Object>();
		Pager rpager = pager.findByIP(shared.getIpAddr(getRequest()));
		if (rpager.getDoctor_id() == null) {
			map.put("return_code", "loginout");
			map.put("return_msg", "loginout");
			renderJson(map);
			return;
		}
		String queue_type_id = getPara("queue_type_id");
		if (StringKit.isBlank(queue_type_id)) {
			map.put("return_code", "fail");
			map.put("return_msg", "请传入队列id");
			renderJson(map);
			return;
		}
		String pager_ip = shared.getIpAddr(getRequest());
		if (StringKit.isBlank(pager_ip)) {
			map.put("return_code", "fail");
			map.put("return_msg", "请传入叫号器ID");
			renderJson(map);
			return;
		}
		String login_id = getPara("login_id");
		if (StringKit.isBlank(login_id)) {
			map.put("return_code", "fail");
			map.put("return_msg", "请传入登陆工号");
			renderJson(map);
			return;
		}
		// 分诊台分诊模式 triage_type 1按医生 2按叫号器
		// 根据医生工号查询分诊台分诊模式
		Record rt = triage.findtypelogin_id(login_id);
		if (null == rt) {
			map.put("return_code", "fail");
			map.put("return_msg", "查询分诊台分诊模式失败");
			renderJson(map);
			return;
		}
		int doctor_id = rpager.getDoctor_id();
		if (StringKit.isBlank(String.valueOf(doctor_id))) {
			map.put("return_code", "fail");
			map.put("return_msg", "获取医生id失败");
			renderJson(map);
			return;
		}
		// 获取分诊台分针模式
		String type = rt.get("triage_type").toString();
		if("1".equals(type)){//按医生
			Record record = servicepatientqueue.call_next_doctor(queue_type_id, pager_ip,
					login_id,doctor_id);
			if (null == record) {
				map.put("return_code", "fail");
				map.put("return_msg", "呼叫失败,无新患者");
				renderJson(map);
				return;
			} else {
				int id = record.getInt("id");
				if ("".equals(id)) {
					map.put("return_code", "fail");
					map.put("return_msg", "获取患者ID失败");
					renderJson(map);
					return;
				}
				boolean bool = servicepatientqueue.update_patient_state(pager_ip,
						login_id, id, doctor_id);
				if (bool) {
					list_patient();
					map.put("return_code", "success");
					map.put("return_msg", "操作成功");
					map.put("list", record);
					Record r = servicepatientqueue
							.count_patient_doctor(pager_ip, login_id);
					map.put("statistic", r);
					map.put("patient_name", record.getStr("patient_name"));
					getSession().setAttribute("id", id);
					renderJson(map);
				}
			}
		}else{//按叫号器
			Record record = servicepatientqueue.call_next_pager(queue_type_id, pager_ip,
					login_id);
			if (null == record) {
				map.put("return_code", "fail");
				map.put("return_msg", "呼叫失败,无新患者");
				renderJson(map);
				return;
			} else {
				int id = record.getInt("id");
				if ("".equals(id)) {
					map.put("return_code", "fail");
					map.put("return_msg", "获取患者ID失败");
					renderJson(map);
					return;
				}
				boolean bool = servicepatientqueue.update_patient_state(pager_ip,
						login_id, id, doctor_id);
				if (bool) {
					list_patient();
					map.put("return_code", "success");
					map.put("return_msg", "操作成功");
					map.put("list", record);
					Record r = servicepatientqueue
							.count_patient_pager(pager_ip, login_id);
					map.put("statistic", r);
					map.put("patient_name", record.getStr("patient_name"));
					getSession().setAttribute("id", id);
					renderJson(map);
				}
			}
		}
		
	}

	// 重新呼叫患者recall
	public void CallPatient() {
		Map<String, Object> map = new HashMap<String, Object>();
		Pager rpager = pager.findByIP(shared.getIpAddr(getRequest()));
		if (rpager.getDoctor_id() == null) {
			map.put("return_code", "loginout");
			map.put("return_msg", "loginout");
			renderJson(map);
			return;
		}
		int doctor_id = rpager.getDoctor_id();
		String login_id = getPara("login_id");
		if (StringKit.isBlank(login_id)) {
			map.put("return_code", "fail");
			map.put("return_msg", "请填写登陆工号");
			renderJson(map);
			return;
		}

		String pager_ip = shared.getIpAddr(getRequest());
		if (StringKit.isBlank(pager_ip)) {
			map.put("return_code", "fail");
			map.put("return_msg", "error");
			renderJson(map);
			return;
		}

		// 分诊台分诊模式 triage_type 1按医生 2按叫号器
		// 根据医生工号查询分诊台分诊模式
		Record rt = triage.findtypelogin_id(login_id);
		if (null == rt) {
			map.put("return_code", "fail");
			map.put("return_msg", "查询分诊台分诊模式失败");
			renderJson(map);
			return;
		}
		// 获取分诊台分针模式
		String type = rt.getStr("triage_type");
		// 获取当前叫号患者的id
			Record rd = servicepatientqueue.select_patient_queue_id(pager_ip,
					login_id, type);

			if (null == rd.getInt("id")) {
				map.put("return_code", "fail");
				map.put("return_msg", "patient_queue_id获取失败");
				renderJson(map);
				return;
			}
			int patient_queue_id = rd.getInt("id");
			Record record =servicepatientqueue.recall(patient_queue_id, pager_ip,
						login_id, type);
		
			if (null == record) {
				map.put("return_code", "fail");
				map.put("return_msg", "重呼患者失败");
				renderJson(map);
				return;
			} else {
				String id = rd.get("id").toString();
				if (id == null) {
					map.put("return_code", "fail");
					map.put("return_msg", "session获取失败");
					renderJson(map);
					return;
				}
				boolean bool = servicepatientqueue.update_patient_state(pager_ip,
						login_id, Integer.parseInt(id), doctor_id);
				if (bool) {
					map.put("return_code", "success");
					map.put("return_msg", "操作成功");
					map.put("list", record);
					getSession().setAttribute("id", patient_queue_id);
					renderJson(map);
				}

			}
		}
	// SetPatientState 更新患者状态-其中0代表未到过号；1代表已就诊) patient_queue_id state pager_ip
	// login_id
	public void SetPatientState() {
		Map<String, Object> map = new HashMap<String, Object>();
		Pager rpager = pager.findByIP(shared.getIpAddr(getRequest()));
		if (rpager.getDoctor_id() == null) {
			map.put("return_code", "loginout");
			map.put("return_msg", "loginout");
			renderJson(map);
			return;
		}
		String pager_ip = shared.getIpAddr(getRequest());
		if (StringKit.isBlank(pager_ip)) {
			map.put("return_code", "fail");
			map.put("return_msg", "pager_ip不能为空");
			renderJson(map);
			return;
		}
		System.out.println(pager_ip);
		String login_id = getPara("login_id");
		if (StringKit.isBlank(login_id)) {
			map.put("return_code", "fail");
			map.put("return_msg", "login_id不能为空");
			renderJson(map);
			return;
		}
		System.out.println(login_id);
		int state = getParaToInt("state", -1);
		if (-1 == state) {
			map.put("return_code", "fail");
			map.put("return_msg", "state不能为空");
			renderJson(map);
			return;
		}
		System.out.println(state);

		// 分诊台分诊模式 triage_type 1按医生 2按叫号器
		// 根据医生工号查询分诊台分诊模式
		Record rt = triage.findtypelogin_id(login_id);
		if (null == rt) {
			map.put("return_code", "fail");
			map.put("return_msg", "查询分诊台分诊模式失败");
			renderJson(map);
			return;
		}
		// 获取分诊台分针模式
		String type = rt.getStr("triage_type");
		// String queue_type_id = getPara("queue_type_id").toString();
		// 获取当前叫号患者的id
		Record rd = servicepatientqueue.select_patient_queue_id(pager_ip,
				login_id, type);
		if (null == rd) {
			map.put("return_code", "fail");
			map.put("return_msg", "patient_queue_id获取失败");
			renderJson(map);
			return;
		}
		int patient_queue_id = rd.getInt("id");
		System.out.println(patient_queue_id);
		int num = servicepatientqueue.SetPatientState(patient_queue_id,
				pager_ip, login_id, state, type);
		if (num < 0) {
			map.put("return_code", "fail");
			map.put("return_msg", "更新患者状态失败");
			renderJson(map);
			return;
		} else {
			map.put("return_code", "success");
			map.put("return_msg", "更新患者状态成功");
			renderJson(map);
		}
	}

	// 患者选择呼叫
	public void call_select() {
		Map<String, Object> map = new HashMap<String, Object>();
		Pager rpager = pager.findByIP(shared.getIpAddr(getRequest()));
		if (null == rpager.getDoctor_id()) {
			map.put("return_code", "loginout");
			map.put("return_msg", "loginout");
			renderJson(map);
			return;
		}
		int doctor_id = rpager.getDoctor_id();

		String patient_queue_id = getPara("patient_queue_id");
		if (StringKit.isBlank(patient_queue_id)) {
			map.put("return_code", "fail");
			map.put("return_msg", "patient_queue_id不能为空");
			renderJson(map);
			return;
		}
		String queue_type_id = getPara("queue_type_id");
		System.out.println(queue_type_id);
		if (StringKit.isBlank(queue_type_id)) {
			map.put("return_code", "fail");
			map.put("return_msg", "queue_type_id不能为空");
			renderJson(map);
			return;
		}
		String login_id = getPara("login_id");
		if (StringKit.isBlank(login_id)) {
			map.put("return_code", "fail");
			map.put("return_msg", "login_id不能为空");
			renderJson(map);
			return;
		}
		String pager_ip = shared.getIpAddr(getRequest());
		if (StringKit.isBlank(pager_ip)) {
			map.put("return_code", "fail");
			map.put("return_msg", "pager_id不能为空");
			renderJson(map);
			return;
		}
		// 分诊台分诊模式 triage_type 1按医生 2按叫号器
		// 根据医生工号查询分诊台分诊模式
		Record rt = triage.findtypelogin_id(login_id);
		if (null == rt) {
			map.put("return_code", "fail");
			map.put("return_msg", "查询分诊台分诊模式失败");
			renderJson(map);
			return;
		}
		// 获取分诊台分针模式
		String type = rt.get("triage_type").toString();
		Record record = servicepatientqueue.call_select(patient_queue_id,
				queue_type_id, pager_ip, login_id,type);
		if (null == record) {
			map.put("return_code", "fail");
			map.put("return_msg", "呼叫失败,无新患者");
			renderJson(map);
			return;
		} else {
			int id = record.getInt("id");
			if ("".equals(id)) {
				map.put("return_code", "fail");
				map.put("return_msg", "呼叫失败");
				renderJson(map);
				return;
			}
			boolean bool = servicepatientqueue.update_patient_state(pager_ip,
					login_id, id, doctor_id);
			if (bool) {
				map.put("return_code", "success");
				map.put("return_msg", "呼叫成功");
				map.put("list", record);
				renderJson(map);
			}
		}
	}

	// 查询是否有未更改状态的患者
	public void list_state_patient() {
		Map<String, Object> map = new HashMap<String, Object>();

		String pager_ip = shared.getIpAddr(getRequest());
		if (StringKit.isBlank(pager_ip)) {
			map.put("return_code", "fail");
			map.put("return_msg", "获取pager_ip失败");
			renderJson(map);
			return;
		}
		String login_id = getPara("login_id");
		if (StringKit.isBlank(login_id)) {
			map.put("return_code", "fail");
			map.put("return_msg", "获取login_id失败");
			renderJson(map);
			return;
		}
		// 分诊台分诊模式 triage_type 1按医生 2按叫号器
		// 根据医生工号查询分诊台分诊模式
		Record rt = triage.findtypelogin_id(login_id);
		if (null == rt) {
			map.put("return_code", "fail");
			map.put("return_msg", "查询分诊台分诊模式失败");
			renderJson(map);
			return;
		}
		// 获取分诊台分针模式
		String type = rt.get("triage_type").toString();
		Record rd = servicepatientqueue.select_state_patient(pager_ip,
				login_id, type);
		if (null != rd) {
			map.put("return_code", "fail");
			map.put("return_msg", "\"" + rd.get("patient_name")
					+ "\"患者未进行诊结，过号操作，不能呼叫下一患者");
			map.put("patient_name", rd.get("patient_name"));
			renderJson(map);
			return;
		} else {
			map.put("return_code", "success");
			map.put("return_msg", "可以进行呼叫操作");
			renderJson(map);
		}
	}

	// 大屏显示
	/*
	 * public void list_patient_wait() { Map<String, Object> map = new
	 * HashMap<String, Object>(); //自动获取访问屏的ip String ip =
	 * shared.getIpAddr(getRequest()); //定义空数组 String[] aa = new String[0];
	 * //判断ip if (StringKit.isBlank(ip)) { map.put("return_code", "fail");
	 * map.put("return_msg", "获取ip失败"); map.put("count", 0); map.put("fztname",
	 * "未知"); map.put("list", aa); renderJson(map); return; } //根据屏ip查询 Terminal
	 * r = terminal.findbyip(ip); if (null == r) { map.put("return_code",
	 * "fail"); map.put("return_msg", "查询失败"); map.put("fztname", "未知");
	 * map.put("list", aa); renderJson(map); return; } // 根据屏的ip查询分诊台的ip Record
	 * rcd = terminal.findbytriageip(ip); if (null == rcd) {
	 * map.put("return_code", "fail"); map.put("return_msg", "查询失败");
	 * renderJson(map); return; } //获取分诊台ip String triageip = rcd.getStr("ip");
	 * //根据分诊台查询队列 List<Record> lt = queuetype.list_queue_type(triageip); if
	 * (lt.size() == 0) { map.put("return_code", "fail"); map.put("return_msg",
	 * "没有队列"); map.put("fztname", r.getName()); map.put("list", aa);
	 * renderJson(map); return; } for(int i=0;i<lt.size();i++){ // 当前就诊人 Record
	 * dqjzr =
	 * servicepatientqueue.list_patient_visit(lt.get(i).getStr("queue_type_id"
	 * ));
	 * 
	 * //如果当前就诊人为空返回null if(null==dqjzr){ map.put("jz_name", "");
	 * map.put("jzbh", ""); }else{ map.put("jz_name",
	 * dqjzr.getStr("patient_name")); map.put("jzbh",
	 * dqjzr.getStr("register_id")); } //等候人 List<PatientQueue> list=
	 * servicepatientqueue.querydgtop10(lt.get(i).getStr("queue_type_id"));
	 * if(list.isEmpty()){ map.put("dh_name", ""); map.put("dh_bh", ""); }else{
	 * map.put("dh_name"+i, list.get(i).getPatient_name()); map.put("dh_bh"+i,
	 * list.get(i).getRegister_id()); } map.put("", lt.get(i).getStr("name")); }
	 * 
	 * renderJson(map); }
	 */

	// 患者就诊情况（GetStatistic）queue_type_id pager_ip login_id
	public void GetStatistic() {
		Map<String, Object> map = new HashMap<String, Object>();
		int queue_type_id = getParaToInt("queue_type_id", -1);
		if (-1 == queue_type_id) {
			map.put("return_code", "fail");
			map.put("return_msg", "队列编号不能为空");
			renderJson(map);
			return;
		}
		String queuetypeid = String.valueOf(queue_type_id);
		String pager_ip = getPara("pager_ip");
		if (StringKit.isBlank(pager_ip)) {
			map.put("return_code", "fail");
			map.put("return_msg", "叫号器IP不能为空");
			renderJson(map);
			return;
		}
		String login_id = getPara("login_id");
		if (StringKit.isBlank(login_id)) {
			map.put("return_code", "fail");
			map.put("return_msg", "医生工号不能为空");
			renderJson(map);
			return;
		}
		Record record = servicepatientqueue.GetStatistic(queuetypeid, pager_ip,
				login_id);
		if (null == record) {
			map.put("return_code", "fail");
			map.put("return_msg", "操作失败");
			renderJson(map);
			return;
		} else {
			map.put("return_code", "success");
			map.put("return_msg", "操作成功");
			map.put("statistic", record);
			renderJson(map);
		}
	}

	// 获取患者列表（GetPatientList）
	public void GetPatientList() {
		Map<String, Object> map = new HashMap<String, Object>();
		String Queue_type_source_id = getPara("Queue_type_source_id");
		if (StringKit.isBlank(Queue_type_source_id)) {
			map.put("return_code", "fail");
			map.put("return_msg", "队列编号不能为空");
			renderJson(map);
			return;
		}
		String pager_ip = getPara("pager_ip");
		if (StringKit.isBlank(pager_ip)) {
			map.put("return_code", "fail");
			map.put("return_msg", "叫号器IP不能为空");
			renderJson(map);
			return;
		}
		String login_id = getPara("login_id");
		if (StringKit.isBlank(login_id)) {
			map.put("return_code", "fail");
			map.put("return_msg", "医生工号不能为空");
			renderJson(map);
			return;
		}
		if (null == getSessionAttr("login")) {
			map.put("return_code", "fail");
			map.put("return_msg", "医生未登录");
			renderJson(map);
			return;
		}
		List<Record> list = servicepatientqueue.GetPatientList(
				Queue_type_source_id, pager_ip, login_id);
		if (null == list) {
			map.put("return_code", "fail");
			map.put("return_msg", "查询失败");
			renderJson(map);
			return;
		} else {
			map.put("return_code", "success");
			map.put("return_msg", "查询成功");
			map.put("list", list);
			renderJson(map);
		}
	}

	// 大屏显示
//	public void list_patient_wait() {
//		Map<String, Object> map = new HashMap<String, Object>();
//		String ip = shared.getIpAddr(getRequest());
//		String[] aa = new String[0];
//
//		if (StringKit.isBlank(ip)) {
//			map.put("return_code", "fail");
//			map.put("return_msg", "获取ip失败");
//			map.put("count", 0);
//			map.put("fztname", "未知");
//			map.put("list", aa);
//			renderJson(map);
//			return;
//		}
//
//		Terminal r = terminal.findbyip(ip);
//		if (null == r) {
//			map.put("return_code", "fail");
//			map.put("return_msg", "查询失败");
//			map.put("fztname", "未知");
//			map.put("list", aa);
//			renderJson(map);
//			return;
//		}
//		// 根据屏的ip查询分诊台的ip
//		Record rcd = terminal.findbytriageip(ip);
//		if (null == rcd) {
//			map.put("return_code", "fail");
//			map.put("return_msg", "查询失败");
//			renderJson(map);
//			return;
//		}
//		String triageip = rcd.getStr("ip");
//		List<Record> lt = queuetype.list_queue_type(triageip);
//		if (lt.size() == 0) {
//			map.put("return_code", "fail");
//			map.put("return_msg", "没有队列");
//			map.put("fztname", r.getName());
//			map.put("list", aa);
//			renderJson(map);
//			return;
//		}
//
//		String json = "{\"count\":" + lt.size() + ",\"fztname\":\""
//				+ r.getName() + "\",\"list\":[";
//		for (Record rd : lt) {
//			String queuetypeid = rd.getStr("queue_type_id");
//			// 当前就诊人
//			Record dqjzr = servicepatientqueue.list_patient_visit(queuetypeid);
//			try {
//
//				json += "{\"jz_name\":\""+ dqjzr.get("patient_name") + "\",\"jzbh\":\""
//						+ dqjzr.get("register_id") + "\",";
//			} catch (Exception e) {
//				json += "{\"jz_name\":\"\",\"jzbh\":\"\",";
//
//			}
//			for (int i = 0; i < 10; i++) {
//				// 等候人
//				List<PatientQueue> top10 = servicepatientqueue
//						.querydgtop10(queuetypeid);
//				try {
//
//					json += "\"dh_name" + i + "" + "\":\""+ top10.get(i).getPatient_name() + "\",";
//				} catch (Exception e) {
//					json += "\"dh_name" + i + "" + "\":\"\",";
//				}
//			}
//
//			// 去除最后一个逗号
//			json = json.substring(0, json.length() - 1);
//
//			json += ",\"zsmc\":\"" + rd.get("name") + "\"";
//			json += "},";
//
//		}
//		json = json.substring(0, json.length() - 1);
//		json += "]}";
//		renderJson(json);
//	}
	// 大屏显示
		public void list_patient_wait() {
			Map<String, Object> map = new HashMap<String, Object>();
			String ip = shared.getIpAddr(getRequest());
			String[] aa = new String[0];

			if (StringKit.isBlank(ip)) {
				map.put("return_code", "fail");
				map.put("return_msg", "获取ip失败");
				map.put("count", 0);
				map.put("fztname", "未知");
				map.put("list", aa);
				renderJson(map);
				return;
			}

			Terminal r = terminal.findbyip(ip);
			if (null == r) {
				map.put("return_code", "fail");
				map.put("return_msg", "查询失败");
				map.put("fztname", "未知");
				map.put("list", aa);
				renderJson(map);
				return;
			}
			// 根据屏的ip查询分诊台的ip
			Record rcd = terminal.findbytriageip(ip);
			if (null == rcd) {
				map.put("return_code", "fail");
				map.put("return_msg", "查询失败");
				renderJson(map);
				return;
			}
			String triageip = rcd.getStr("ip");
			List<Record> lt = queuetype.list_queue_type(triageip);
			if (lt.size() == 0) {
				map.put("return_code", "fail");
				map.put("return_msg", "没有队列");
				map.put("fztname", r.getName());
				map.put("list", aa);
				renderJson(map);
				return;
			}

			String json = "{\"count\":" + lt.size() + ",\"fztname\":\""
					+ r.getName() + "\",\"list\":[";
			for (Record rd : lt) {
				String queuetypeid = rd.getStr("queue_type_id");
				// 当前就诊人
				Record dqjzr = servicepatientqueue.list_patient_visit(queuetypeid);
				try {

					json += "{\"jz_name\":\"(" + dqjzr.get("register_id") + ")"
							+ dqjzr.get("patient_name") + "\",\"jzbh\":\""
							+ dqjzr.get("register_id") + "\",";
				} catch (Exception e) {
					json += "{\"jz_name\":\"\",\"jzbh\":\"\",";

				}
				for (int i = 0; i < 10; i++) {
					// 等候人
					List<PatientQueue> top10 = servicepatientqueue
							.querydgtop10(queuetypeid);
					try {

						json += "\"dh_name" + i + "" + "\":\"("
								+ top10.get(i).getRegister_id() + ")"
								+ top10.get(i).getPatient_name() + "\",";
					} catch (Exception e) {
						json += "\"dh_name" + i + "" + "\":\"\",";
					}
				}

				// 去除最后一个逗号
				json = json.substring(0, json.length() - 1);

				json += ",\"zsmc\":\"" + rd.get("name") + "\"";
				json += "},";

			}
			json = json.substring(0, json.length() - 1);
			json += "]}";
			renderJson(json);
		}
}